/**
 * 画布
 * 坦克
 */
import AbstractCanvas from "./abstract/AbstractCanvas";
import ModelPlayer from "../model/Player";
import config from "../config";

/**
 * 画布是单例模式
 * 在一个图层，所以只需要new一个实例即可。
 */
export default new (class extends AbstractCanvas implements ICanvas {
    render(): void {
        // super：调用父类的方法
        this.createModels()
        // 调用渲染模型，防止每次重新渲染时，又生成新的模型实例
        super.renderModels();
        // console.log("player", Number((100 / config.tank.speed).toFixed(3)))

    }
    //停止，停止移动
    stop() {
    }
    // 抽象方法，返回模型
    model(): ConstructorModel {
        return ModelPlayer;
    }

    // 抽象方法：返回模型数量
    num(): number {
        return 0
    }

    // 重写父类方法
    // 绘制模型,生成模型实例，只负责创建实例
    createModels() {
        const casW = config.canvas.width
        const casH = config.canvas.height
        const modelW = config.model.common.width
        const modelH = config.model.common.height
        let position = {x: casW / 2 + modelW * 3, y: casH - modelH}
        const model = this.model() as ConstructorModel
        const instance = new model(position.x, position.y)
        this.models.push(instance)
    }

    // 画布渲染模型（将模型渲染到画布上）
    public renderModels() {
        // 调用渲染模型，防止每次重新渲染时，又生成新的模型实例
        super.renderModels();

    }
})('player')
